package org.basis.algorithm.practice;

import java.util.HashSet;

/**
 * 三数之和问题
 * 相关题型：https://leetcode-cn.com/problems/3sum/
 *
 * @author Mr_wenpan@163.com 2022/03/21 12:15
 */
public class ThreeNumSum {

    public static void main(String[] args) {

    }

    public static boolean f4(int[] nums, int target) {
        int len = nums.length;
        // 对于每一个i位置都看看有没有其他任意两个位置（p1、p2）满足 nums[p1] + nums[p1] = target - nums[i]
        // 也就是将三数之和转换为两数之和的问题
        for (int i = 0; i < len; i++) {
            HashSet<Integer> set = new HashSet<>();
            // 求两数之和有没有等于newTarget的
            int newTarget = target - nums[i];
            for (int j = i + 1; j < len; j++) {
                // set中是否存在一个数x，使得 x + nums[j] == newTarget
                boolean contains = set.contains(newTarget - nums[j]);
                // 找到了
                if (contains) {
                    return true;
                } else {
                    // 没找到，则将当前数字加入set中
                    set.add(nums[j]);
                }
            }
        }
        return false;
    }

}
